package com.baishancloud.log.common.connector

import java.io.Serializable

/**
 * 存放有关kafka的一些公共参数值
 *
 * @author ziqiang.wang
 * @date 2021/10/20 16:45
 */
package object kafka extends Serializable {


  //***********************************消费者参数********************************//
  /**
   * 数据源名称，这个名称会显示到UI界面上
   */
  val sourceNameP: String = "source.name"
  /**
   * 必选<br>
   * source连接kafka的url，示例：broker1:9092,broker2:9092
   */
  val sourceBootstrapServersP: String = "source.bootstrapServersSource"
  /**
   * 必选<br>
   * source主题名称，多个名称，使用英文逗号分隔，中间不要有空格
   */
  val sourceTopicsP: String = "source.topics"
  /**
   * 必选<br>
   * 组id
   */
  val sourceGroupIdP: String = "source.groupId"
  /**
   * 第一次消费kafka时的offset位置，默认从最开始位置消费<br>
   * earliest，表示最早位置；latest表示最新位置。
   */
  val sourceAutoOffsetResetP: String = "source.autoOffsetReset"
  val earliest: String = "earliest"
  val latest: String = "latest"
  /**
   * 是否自动提交offset，默认值为true<br>
   * 注：如果开启了checkpoint，则自动提交offset会失效，任务将根据checkpoint来提交offset
   */
  val sourceEnableAutoCommitP: String = "source.enableAutoCommit"
  /**
   * 自动提交offset的情况下，自动提交的间隔，默认5秒，单位：秒
   */
  val sourceAutoCommitIntervalMsP: String = "source.autoCommitIntervalMs"
  /**
   * 自动发现新主题和分区的时间间隔，默认为一小时，单位：分钟
   */
  val sourcePartitionDiscoveryIntervalMsP: String = "source.partitionDiscoveryIntervalMs"



  //***********************************生产者参数********************************//
  /**
   * 必选<br>
   * sink连接kafka的url，示例：broker1:9092,broker2:9092
   */
  val sinkBootstrapServersP: String = "sink.bootstrapServers"
  /**
   * 必选<br>
   * sink主题名称
   */
  val sinkTopicP: String = "sink.topic"
  /**
   * 交付语义，默认为恰好一次。<br>
   * none：无交付，数据可能会丢失，也可能会重复。<br>
   * exactly_once：恰好一次，依赖于程序开启checkpoint，并且使用了Kafka事务，因此会对写入性能有所影响。<br>
   * at_least_once：至少一次，数据可能会重复，但不会丢失。<br>
   */
  val sinkSemanticP: String = "sink.semantic"
  val semanticNone: String = "none"
  val semanticExactlyOnce: String = "exactly_once"
  val semanticAtLeastOnce: String = "at_least_once"
  /**
   * 事务超时时间，默认1小时，不可设置比此时间小的数字。单位：分钟。
   */
  val sinkTransactionMaxTimeoutMsP: String = "sink.transactionMaxTimeoutMs"
  /**
   * 生产者对每个分区缓存记录的空间占用大小，默认5M，不可小于此值，否则在开启切好一次语义时，可能会因为发送数据总空间占用过大而报错。单位：M
   */
  val sinkBatchSize: String = "sink.batchSize"
  /**
   * 生产者发送请求的大小，默认为6M，不可小于batch.size。单位：M
   */
  val sinkMaxRequestSizeP: String = "sink.maxRequestSize"
  /**
   * 生产者要求写入几个副本算是写入成功，默认为-1，全部写入。在开启切好一次写入时，必须是-1.
   */
  val sinkAcks: String = "sink.acks"
  /**
   * 生产者压缩格式，目前集群broker未设置压缩格式，交由生产者自己指定，默认为不压缩
   */
  val sinkCompressionTypeP: String = "sink.compressionType"


}
